package com.rt.schedulebase.entity.commonentity;

import com.github.pagehelper.Page;
import com.rt.schedulenew.utils.global.ErrorCode;
import com.rt.schedulenew.utils.global.JsonResult;
import com.rt.schedulenew.utils.global.PageVO;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Gsc
 * @date 2021/12/23
 */
public class PageResultUtil {
    public static JsonResult success(String message, Object result, Page<?> page) {
        PageVO pageVO = new PageVO();
        pageVO.setPageNo(page.getPageNum());
        pageVO.setPages(page.getPages());
        pageVO.setPageSize(page.getPageSize());
        pageVO.setTotal(page.getTotal());
        JsonResult jsonResult = new JsonResult();

        jsonResult.setStatus(ErrorCode.SUCCESS.getKey())
                .setMessage(message)
                .setResult(result)
                .setPage(pageVO);
        return jsonResult;
    }


    /**
     * 手动分页
     *
     * @param message 消息
     * @param originList 分页前数据
     * @param pageNum    页码
     * @param pageSize   每页数量
     * @return 分页后结果
     */
    public static <T> JsonResult getPage(String message, List<T> originList, Integer pageNum, Integer pageSize) {
        JsonResult jsonResult = new JsonResult();

        // 如果页码为空或者每页数量为空
        pageNum = pageNum == null ? 1 : pageNum;
        pageSize = pageSize == null ? 10 : pageSize;

        // 分页后的结果
        List<T> result = new ArrayList<>();

        if (originList.size() < pageSize) {
            return jsonResult;
        }
        // 如果需要进行分页
        if (pageNum > 0 && pageSize > 0) {
            // 获取起点
            int pageStart = (pageNum - 1) * pageSize;
            // 获取终点
            int pageStop = pageStart + pageSize;
            // 开始遍历
            while (pageStart < pageStop) {
                // 考虑到最后一页可能不够pageSize
                int p = pageStart++;
                if (p >= originList.size()) {
                    break;
                } else {
                    result.add(originList.get(p));
                }

            }
        }
        PageVO pageVO = new PageVO();
        pageVO.setPageNo(pageNum);
        pageVO.setPageSize(pageSize);
        pageVO.setPages(originList.size()/pageSize);
        pageVO.setTotal(Long.valueOf(originList.size()));
        jsonResult.setStatus(ErrorCode.SUCCESS.getKey())
                .setMessage(message)
                .setResult(result)
                .setPage(pageVO);
        return jsonResult;
    }
}
